package com.atguigu.test.aware;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;

import javax.annotation.PostConstruct;

/**
 * @author zp
 * @version 1.0
 * @description: 实现自定义的InitializingBean接口
 * 这个接口提供了spring内置的属性初始化的方法 提供了afterPropertiesSet方法的调用
 * 可以在一些注解失效的过程中填补
 * 这是spring内置的一种初始化方案
 *
 * 在spring的配置类当中 注入一些beanFactory的后置处理器 会失效 比如@Bean 或者@Autowried 等注解
 * 因为这些注解的解析是在beanFactory后置处理器的后面加载的 他们依赖的是bean的后置处理器 在spring的生命周期当中
 * beanFactory后置处理器的执行顺序是优先于bean的后置处理器的 所以使用这些注解注入beanFactory后置处理器或者其子接口 都会失效
 * 使用可以使用InitializingBean接口 使用spring内置的初始化接口 是一定会执行不存在失效风险
 * @date 2022/12/17 16:54
 */
@Slf4j
public class MyInitializingBean implements InitializingBean  {

    @PostConstruct
    public void init(){
        log.info("自定义MyInitializingBean的 PostConstruct注解的方式调用》》》初始化方法");
    }
    @Override
    public void afterPropertiesSet() throws Exception {
      log.info("自定义MyInitializingBean的 InitializingBean接口的方式调用》》》 初始化方法");
    }

    public void initBean(){
        log.info("自定义MyInitializingBean的 bean注解的》》》 初始化方法");
    }
}
